home *** CD-ROM | disk | FTP | other *** search
/ PC-Blue - MS DOS Public Domain Library / PC-Blue MS-DOS Public Domain Library - NYACC.iso / vol024 / rubic.bas < prev    next >
Encoding:
BASIC Source File  |  1987-01-11  |  8.8 KB  |  285 lines

  1. 1 CLS
  2. 10 PRINT "INSTRUCTIONS"
  3. 20 PRINT "WHEN YOU ARE ASKED FOR THE NUMBER OF MIXES, ENTER THE NUMBER OF"
  4. 30 PRINT "RANDOM FACE ROTATIONS YOU DESIRE" : PRINT
  5. 40 PRINT " WHEN YOU ARE ASKED FOR YOUR MOVE, ENTER THE DESIGNATION OF THE "
  6. 50 PRINT " FACE:  F=FRONT, B=BACK, L=LEFT, R=RIGHT,T=TOP, B=BOTTOM
  7. 60 PRINT" AND THE AMOUNT OF ROTATION, += CLOCKWIZE 1, -=COUNTERCLOCKWIZE 1"
  8. 70 PRINT "              2= 180 DEGREES"
  9. 80 PRINT " SEE THE ARTICLE IN KILOBAUD JANUARY 1982 PAGE 28"
  10. 90 PRINT " THIS VERSION WAS EXTENSIVELY CONVERTED TO RUN ON THE ibm"
  11. 100 PRINT "I CAN'T FIGURE WHY THEY USED SUCH A LARGE ARRAY TO STORE THE CUBE"
  12. 101 PRINT " LINE 730 PRINTS THE RANDOM MIX MOVES SO THAT YOU CAN "
  13. 102 PRINT " CHEAT AND SOLVE THE CUBE.  COMMENT THIS LINE OUT TO BE HONEST"
  14. 110 PRINT "PRESS ANY KEY TO CONTINUE"
  15. 120 B$=INKEY$:IF B$="" THEN GOTO 120
  16. 130 CLS
  17. 140 SCREEN 2
  18. 150 DRAW "BL120M-120,-20D60M+120,20U60M+120,-20D60M-120,20U20M-120,-20U20"
  19. 160 DRAW "M+120,20M+120,-20D20M-120,20D20M-40,-7U60M+120,-20M+40,+7M-120,-20"
  20. 170 DRAW "M-120,20D60M+40,+7U60M+120,-20M-40,-7M-40,+7M+120,+20D60M-40,+7U60"
  21. 180 DRAW "M-120,-20"
  22. 190 DRAW "BR360BD45"
  23. 200 DRAW "A2M-120,-20D60M+120,20U60M+120,-20D60M-120,20U20M-120,-20U20"
  24. 210 DRAW "M+120,20M+120,-20D20M-120,20D20M-40,-7U60M+120,-20M+40,+7M-120,-20"
  25. 220 DRAW "M-120,20D60M+40,+7U60M+120,-20M-40,-7M-40,+7M+120,+20D60M-40,+7U60"
  26. 230 DRAW "M-120,-20A0"
  27. 240 OP$="D6R5U6L5":YP$="F3E3G3D3":RP$="D6U6R5D3L5R3F4":WP$="D6E3F3U6"
  28. 250 BP$="D6R5U3L5R5U3L5":GP$="R5D1U1L5D6R5U2L1"
  29. 260 DIM OA%(5),YA%(5),RA%(5),WA%(5),BA%(5),GA%(5)
  30. 270 DRAW "BM1,1;XOP$;":GET(1,1)-(7,8),OA% :PUT(1,1),OA%
  31. 280 DRAW "BM1,1;XYP$;":GET(1,1)-(7,8),YA% :PUT(1,1),YA%
  32. 290 DRAW "BM1,1;XRP$;":GET(1,1)-(7,8),RA% :PUT(1,1),RA%
  33. 300 DRAW "BM1,1;XWP$;":GET(1,1)-(7,8),WA% :PUT(1,1),WA%
  34. 310 DRAW "BM1,1;XBP$;":GET(1,1)-(7,8),BA% :PUT(1,1),BA%
  35. 320 DRAW "BM1,1;XGP$;":GET(1,1)-(7,8),GA% :PUT(1,1),GA%
  36. 330 DATA 478,149,518,143,557,136,437,142,478,136,518,129,396,136,437,129,478
  37. 340 DATA 123
  38. 350 DATA 177,144,177,124,177,104,137,137,137,117,137,97,97,131,97,111,97,91
  39. 360 DATA 217,144,217,124,217,104,257,137,257,117,257,97,297,131,297,111,297,91
  40. 370 DATA 197,90,157,84,117,77,237,84,197,77,157,71,277,77,237,71,197,64
  41. 380 DATA 376,123,376,103,376,83,416,117,416,97,416,77,456,110,456,90,456,70
  42. 390 DATA 577,123,577,103,577,83,537,117,537,97,537,77,496,110,496,90,496,70
  43. 400 DIM R$(5,5,5),R1$(5,5,5),A$(5,5),B$(5,5),C$(5,5),D$(5,5)
  44. 410 LLL=0
  45. 420 FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5
  46. 430 R$(I,J,K)=""
  47. 440 NEXT K: NEXT J: NEXT I
  48. 450 FOR I=2 TO 4:FOR J=2 TO 4
  49. 460 R$(1,I,J)="R":R$(I,1,J)="W":R$(I,J,1)="G"
  50. 470 R$(5,I,J)="O":R$(I,5,J)="B":R$(I,J,5)="Y"
  51. 480 NEXT J: NEXT I
  52. 490 REM
  53. 500 REM MIX RUBIK'S CUB
  54. 510 REM
  55. 520 INPUT "INPUT NUMBER OF MIXES";N
  56. 530 Z$=""
  57. 540 FOR I=1 TO N
  58. 550 X%= INT(6*RND(1)):Y%= INT(3*RND(1))
  59. 560 IF X%<>0 THEN 580
  60. 570 X$="R":GOTO 670
  61. 580 IF X%<>1 THEN 600
  62. 590 X$="F": GOTO 670
  63. 600 IF X%<>2 THEN 620
  64. 610 X$="L": GOTO 670
  65. 620 IF X%<>3 THEN 640
  66. 630 X$="U": GOTO 670
  67. 640 IF X%<>4 THEN 660
  68. 650 X$="B": GOTO 670
  69. 660 X$="D"
  70. 670 IF Y%<>0 THEN 690
  71. 680 Y$="+": GOTO 720
  72. 690 IF Y%<>1 THEN 710
  73. 700 Y$="-": GOTO 720
  74. 710 Y$="2"
  75. 720 Z$=Z$+X$+Y$
  76. 730 PRINT Z$
  77. 740 NEXT I
  78. 750 GOSUB 920
  79. 760 GOSUB 2470
  80. 770 REM
  81. 780 REM CHANGE RUBIK'S CUBE
  82. 790 REM
  83. 800 LOCATE 1,1
  84. 810 PRINT "                         "
  85. 820 PRINT "                         "
  86. 830 LLL=1
  87. 840 LOCATE 1,1
  88. 850 INPUT "INPUT MOVE";Z$
  89. 860 GOSUB 920
  90. 870 GOSUB 2470
  91. 880 GOTO 800
  92. 890 REM
  93. 900 REM PERFORM MOVES
  94. 910 REM
  95. 920 'FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5
  96. 930 'R1$(I,J,K)=R$(I,J,K)
  97. 940 'NEXT K: NEXT J: NEXT I
  98. 950 IF Z$="" THEN RETURN
  99. 960 X$=MID$(Z$,1,1)
  100. 970 IF X$="S" THEN 2780
  101. 980 IF X$="M" THEN 1670
  102. 990 REM
  103. 1000 REM MOVE FACES
  104. 1010 REM
  105. 1020 Y$=MID$(Z$,2,1)
  106. 1030 IF X$<>"R" THEN 1130
  107. 1040 FOR I=1 TO 5:FOR J=1 TO 5
  108. 1050 A$(I,J)=R$(I,1,J):B$(I,J)=R$(I,2,J)
  109. 1060 NEXT J: NEXT I
  110. 1070 GOSUB 2140
  111. 1080 IF E=1 THEN 2090
  112. 1090 FOR I=1 TO 5: FOR J=1 TO 5
  113. 1100 R$(I,1,J)=A$(I,J):R$(I,2,J)=B$(I,J)
  114. 1110 NEXT J: NEXT I
  115. 1120 GOTO 1620
  116. 1130 IF X$<>"F" THEN 1230
  117. 1140 FOR I=1 TO 5: FOR J=1 TO 5
  118. 1150 A$(I,J)=R$(1,I,J):B$(I,J)=R$(2,I,J)
  119. 1160 NEXT J: NEXT I
  120. 1170 GOSUB 2220
  121. 1180 IF E=1 THEN 2090
  122. 1190 FOR I=1 TO 5: FOR J=1 TO 5
  123. 1200 R$(1,I,J)=A$(I,J): R$(2,I,J)=B$(I,J)
  124. 1210 NEXT J: NEXT I
  125. 1220 GOTO 1620
  126. 1230 IF X$<>"L" THEN 1330
  127. 1240 FOR I=1 TO 5:FOR J=1 TO 5
  128. 1250 A$(I,J)=R$(I,5,J):B$(I,J)=R$(I,4,J)
  129. 1260 NEXT J: NEXT I
  130. 1270 GOSUB 2220
  131. 1280 IF E=1 THEN 2090
  132. 1290 FOR I=1 TO 5: FOR J=1 TO 5
  133. 1300 R$(I,5,J)=A$(I,J): R$(I,4,J)=B$(I,J)
  134. 1310 NEXT J: NEXT I
  135. 1320 GOTO 1620
  136. 1330 IF X$<>"B" THEN 1430
  137. 1340 FOR I=1 TO 5: FOR J=1 TO 5
  138. 1350 A$(I,J)=R$(5,I,J): B$(I,J)=R$(4,I,J)
  139. 1360 NEXT J: NEXT I
  140. 1370 GOSUB 2140
  141. 1380 IF E=1 THEN 2090
  142. 1390 FOR I=1 TO 5: FOR J=1 TO 5
  143. 1400 R$(5,I,J)=A$(I,J): R$(4,I,J)=B$(I,J)
  144. 1410 NEXT J: NEXT I
  145. 1420 GOTO 1620
  146. 1430 IF X$<>"U" THEN 1530
  147. 1440 FOR I=1 TO 5: FOR J=1 TO 5
  148. 1450 A$(I,J)=R$(I,J,5): B$(I,J)=R$(I,J,4)
  149. 1460 NEXT J: NEXT I
  150. 1470 GOSUB 2140
  151. 1480 IF E=1 THEN 2090
  152. 1490 FOR I=1 TO 5: FOR J=1 TO 5
  153. 1500 R$(I,J,5)=A$(I,J): R$(I,J,4)=B$(I,J)
  154. 1510 NEXT J: NEXT I
  155. 1520 GOTO 1620
  156. 1530 IF X$<>"D" THEN 2090
  157. 1540 FOR I=1 TO 5: FOR J=1 TO 5
  158. 1550 A$(I,J)=R$(I,J,1):B$(I,J)=R$(I,J,2)
  159. 1560 NEXT J: NEXT I
  160. 1570 GOSUB 2220
  161. 1580 IF E=1 THEN 2090
  162. 1590 FOR I=1 TO 5: FOR J=1 TO 5
  163. 1600 R$(I,J,1)=A$(I,J):R$(I,J,2)=B$(I,J)
  164. 1610 NEXT J: NEXT I
  165. 1620 Z$=MID$(Z$,3)
  166. 1630 GOTO 950
  167. 1640 REM
  168. 1650 REM CHANGE VIEWING CORNERS
  169. 1660 REM
  170. 1670 X$=MID$(Z$,2,1):Y$=MID$(Z$,3,1)
  171. 1680 S$=MID$(Z$,4,1)
  172. 1690 IF S$<>"1" AND S$<>"2" AND S$<>"3" THEN 2090
  173. 1700 N=VAL(S$)
  174. 1710 IF X$<>"F" THEN 1960
  175. 1720 IF Y$<>"R" THEN 1840
  176. 1730 Z$=MID$(Z$,5)
  177. 1740 FOR K=1 TO N
  178. 1750 Z$="U-D+"+"Z$
  179. 1760 FOR I=1 TO 5: FOR J=1 TO 5
  180. 1770 A$(I,J)=R$(I,J,3)
  181. 1780 NEXT J: NEXT I
  182. 1790 FOR I=1 TO 5: FOR J=1 TO 5
  183. 1800 R$(6-J,I,3)=A$(I,J)
  184. 1810 NEXT J: NEXT I
  185. 1820 NEXT K
  186. 1830 GOTO 950
  187. 1840 IF Y$<>"U" THEN 2090
  188. 1850 Z$=MID$(Z$,5)
  189. 1860 FOR K=1 TO N
  190. 1870 Z$="R+L-"+Z$
  191. 1880 FOR I=1 TO 5: FOR J=1 TO 5
  192. 1890 A$(I,J)=R$(I,3,J)
  193. 1900 NEXT J: NEXT I
  194. 1910 FOR I=1 TO 5: FOR J=1 TO 5
  195. 1920 R$(J,3,6-I)=A$(I,J)
  196. 1930 NEXT J: NEXT I
  197. 1940 NEXT K
  198. 1950 GOTO 950
  199. 1960 IF X$<>"U" THEN 2090
  200. 1970 IF Y$<>"R" THEN 2090
  201. 1980 Z$=MID$(Z$,5)
  202. 1990 FOR K=1 TO N
  203. 2000 Z$="F+B-"+Z$
  204. 2010 FOR I=1 TO 5: FOR J=1 TO 5
  205. 2020 A$(I,J)=R$(3,I,J)
  206. 2030 NEXT J: NEXT I
  207. 2040 FOR I=1 TO 5: FOR J=1 TO 5
  208. 2050 R$(3,6-J,I)=A$(I,J)
  209. 2060 NEXT J: NEXT I
  210. 2070 NEXT K
  211. 2080 GOTO 950
  212. 2090 PRINT "INVALID MOVE, TRY AGAIN. "
  213. 2100 'FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5
  214. 2110 'R$(I,J,K)=R1$(I,J,K)
  215. 2120 'NEXT K: NEXT J: NEXT I
  216. 2130 RETURN
  217. 2140 E=0
  218. 2150 IF Y$<>"+" THEN 2170
  219. 2160 GOSUB 2370: RETURN
  220. 2170 IF Y$<>"-" THEN 2190
  221. 2180 GOSUB 2300: RETURN
  222. 2190 IF Y$<>"2" THEN 2210
  223. 2200 GOSUB 2300: GOSUB 2300: RETURN
  224. 2210 E=1: RETURN
  225. 2220 E=0
  226. 2230 IF Y$<>"+" THEN 2250
  227. 2240 GOSUB 2300: RETURN
  228. 2250 IF Y$<>"-" THEN 2270
  229. 2260 GOSUB 2370: RETURN
  230. 2270 IF Y$<>"2" THEN 2290
  231. 2280 GOSUB 2300: GOSUB 2300: RETURN
  232. 2290 E=1: RETURN
  233. 2300 FOR I=1 TO 5: FOR J=1 TO 5
  234. 2310 C$(I,J)=A$(I,J): D$(I,J)=B$(I,J)
  235. 2320 NEXT J: NEXT I
  236. 2330 FOR I=1 TO 5: FOR J=1 TO 5
  237. 2340 A$(6-J,I)=C$(I,J):B$(6-J,I)=D$(I,J)
  238. 2350 NEXT J: NEXT I
  239. 2360 RETURN
  240. 2370 FOR I=1 TO 5: FOR J=1 TO 5
  241. 2380 C$(I,J)=A$(I,J): D$(I,J)=B$(I,J)
  242. 2390 NEXT J: NEXT I
  243. 2400 FOR I=1 TO 5: FOR J=1 TO 5
  244. 2410 A$(J,6-I)=C$(I,J): B$(J,6-I)=D$(I,J)
  245. 2420 NEXT J: NEXT I
  246. 2430 RETURN
  247. 2440 REM
  248. 2450 REM PRINT RUBIK'S CUBE
  249. 2460 REM
  250. 2470 RESTORE 330
  251. 2480 FOR K=1 TO 5 STEP 4
  252. 2490 FOR I=2 TO 4: FOR J=2 TO 4
  253. 2500 READ POSA%,POSB%
  254. 2510 IF R$(I,J,K)="R" THEN PUT (POSA%,POSB%),RA% ,PSET
  255. 2520 IF R$(I,J,K)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET
  256. 2530 IF R$(I,J,K)="G" THEN PUT (POSA%,POSB%),GA% ,PSET
  257. 2540 IF R$(I,J,K)="B" THEN PUT (POSA%,POSB%),BA% ,PSET
  258. 2550 IF R$(I,J,K)="W" THEN PUT (POSA%,POSB%),WA% ,PSET
  259. 2560 IF R$(I,J,K)="O" THEN PUT (POSA%,POSB%),OA% ,PSET
  260. 2570 NEXT J: NEXT I
  261. 2580 FOR I=2 TO 4: FOR J=2 TO 4
  262. 2590 READ POSA%,POSB%
  263. 2600 IF R$(K,I,J)="R" THEN PUT (POSA%,POSB%),RA% ,PSET
  264. 2610 IF R$(K,I,J)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET
  265. 2620 IF R$(K,I,J)="G" THEN PUT (POSA%,POSB%),GA% ,PSET
  266. 2630 IF R$(K,I,J)="B" THEN PUT (POSA%,POSB%),BA% ,PSET
  267. 2640 IF R$(K,I,J)="W" THEN PUT (POSA%,POSB%),WA% ,PSET
  268. 2650 IF R$(K,I,J)="O" THEN PUT (POSA%,POSB%),OA% ,PSET
  269. 2660 NEXT J: NEXT I
  270. 2670 FOR I=2 TO 4: FOR J=2 TO 4
  271. 2680 READ POSA%,POSB%
  272. 2690 IF R$(I,K,J)="R" THEN PUT (POSA%,POSB%),RA% ,PSET
  273. 2700 IF R$(I,K,J)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET
  274. 2710 IF R$(I,K,J)="G" THEN PUT (POSA%,POSB%),GA% ,PSET
  275. 2720 IF R$(I,K,J)="B" THEN PUT (POSA%,POSB%),BA% ,PSET
  276. 2730 IF R$(I,K,J)="W" THEN PUT (POSA%,POSB%),WA% ,PSET
  277. 2740 IF R$(I,K,J)="O" THEN PUT (POSA%,POSB%),OA%  ,PSET
  278. 2750 NEXT J: NEXT I
  279. 2760 NEXT K
  280. 2770 RETURN
  281. 2780 PRINT "THANK YOU FOR PLAYING. "
  282. 2790 END
  283. N PUT (POSA%,POSB%),OA%  ,PSET
  284. 2750 NEXT J: NEXT I
  285. 2760 N